package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.dao.CategoryDao;
import com.itheima.global.BusinessException;
import com.itheima.po.Category;
import com.itheima.po.Dish;
import com.itheima.po.Setmeal;
import com.itheima.service.CatetoryService;
import com.itheima.service.DishServcie;
import com.itheima.service.SetmealServcie;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Author Andy
 * @Description //TODO CategoryServiceImpl
 * @Date 2022/3/10 4:04 下午
 * @Version 1.0
 **/
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryDao, Category> implements CatetoryService {

    @Autowired
    private DishServcie dishServcie;

    @Autowired
    private SetmealServcie setmealServcie;

    @Override
    public void deleteByIdOnNoUse(Long id) {
        //    删除功能：1.写一个删除菜品的语句，接收前端发过来的删除某菜品的删除请求
//                 2.管理者先查询判断菜品数据库中是否已经存在
//                 3.如果不存在，给前端响应一个失败的提示，查询没有此菜品。
//            4.如果数据库中有此菜品就查看数据库中此判断里面需要删除的菜品是否在其他菜品或者套餐中占用
//                 5.如果被占用则不能删除，
//            6.如果此菜品没有在其他菜品或者套餐中使用就在数据库中删除此信息，给前端响应删除成功的信息。
        LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
        dishLambdaQueryWrapper.eq(Dish::getCategoryId, id);
        int count = dishServcie.count(dishLambdaQueryWrapper);
        if (count > 0){
            throw new BusinessException("该菜品分类被某些菜品使用，无法删除。");
        }

        LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
        setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId, id);
        count = setmealServcie.count(setmealLambdaQueryWrapper);
        if (count > 0){
            throw new BusinessException("该套餐分类被某些套餐使用，无法删除。");
        }

        this.removeById(id);
    }
}
